package edu.neu.swc.cloud.service;

import edu.neu.swc.cloud.domain.Order;

import java.util.List;
import java.util.Map;

public interface OrderService {

    /**
     * 新增订单，新增后默认订单状态为0
     * @param order
     */
    void addOrder(Order order);

    /**
     * 依据订单编号删除订单，非0状态订单不可删除
     * @param ord_id
     */
    void deleteOrderById(int ord_id);

    /**
     * 更新订单信息，非0状态订单不可更改
     * @param order
     */
    void updateOrder(Order order);

    /**
     * 分页，多字段查询订单信息
     * @param start
     * @param rows
     * @param condition
     * @return
     */
    List<Order> findOrderByPage(int start, int rows, Map<String,String[]> condition);

    /**
     * 多字段查询记录条数
     * @param condition
     * @return
     */
    int findTotalCount(Map<String,String[]> condition);

    /**
     * 订单中标
     * @param fac_id
     * @param ord_id
     */
    void hitOrder(int fac_id,int ord_id);

    /**
     * 依据订单编号发布订单，使订单状态变为1
     * @param ord_id
     */
    void releaseById(int ord_id);

    /**
     * 依据订单编号结束订单，使订单状态变为
     * @param ord_id
     */
    void endById(int ord_id);

    /**
     * 依据ID查询订单信息
     * @param ord_id
     * @return
     */
    Order findOrdById(int ord_id);

    /**
     * 找到所有的订单信息
     * @return
     */
    List<Order> findAll();

    /**
     * 多字段查询订单信息
     * @param condition
     * @return
     */
    List<Order> findOrderByCon(Order condition);

    /**
     * 依据工厂编号寻找订单信息
     * @param my_fac_id
     * @return
     */
    List<Order> findOrdByFac(int my_fac_id);

    /**
     * 找到所有可用订单
     * @return
     */
    List<Order> findOrdAva();

    /**
     * 依据订单编号结束订单排产
     * @param ord_id
     */
    void endPlanById(int ord_id);

    /**
     * 按照订单ID发货
     * @param ord_id
     */
    void transportById(int ord_id);

    /**
     * 依据条件和工厂编号查找订单信息
     * @param my_fac_id
     * @return
     */
    List<Order> findOrdByFacAndCon(int my_fac_id, Order order);

    /**
     * 依据条件查找已发布的订单
     * @param order
     * @return
     */
    List<Order> findOrdAvaByCon(Order order);

    /**
     * 获取订单数目
     * @param ord_code
     * @return
     */
    int getOrderCounts(String ord_code);

    /**
     * 依据条件获取订单信息
     * @param ord_code
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Order> findOrderByQuery(String ord_code, int pageStart, int pageSize);

    /**
     * 查找我的订单数目
     * @param ord_code
     * @param fac
     * @return
     */
    int getMyOrderCounts(String ord_code, int fac);

    /**
     * 查找我的订单列表
     * @param ord_code
     * @param fac
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Order> findMyOrderByQuery(String ord_code, int fac, int pageStart, int pageSize);

    /**
     * 找到已发布订单数目
     * @param ord_code
     * @return
     */
    int getReleasedOrderCounts(String ord_code);

    /**
     * 查询已发布订单列表
     * @param ord_code
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Order> findReleasedOrderByQuery(String ord_code, int pageStart, int pageSize);
}

